package org.nekperu15739.boot.domain;

import java.util.Date;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Embedded;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

import org.apache.commons.lang.builder.ToStringBuilder;


@Entity
@Table(name = "clientes")
public class Cliente {
	
	private int idCliente;
	private String nombre;
	private long telefono;
	private boolean activo;


	private Date fechaAlta;
		
	
	
	private List<Factura> facturas;	

	public Cliente(int idCliente, String nombre, long telefono, boolean activo,
			Date fechaAlta) {
		super();
		this.idCliente = idCliente;
		this.nombre = nombre;
		this.telefono = telefono;
		this.activo = activo;
		this.fechaAlta = fechaAlta;
	}
	
	public Cliente(String nombre, long telefono, boolean activo,
            Date fechaAlta) {
        super();
        this.nombre = nombre;
        this.telefono = telefono;
        this.activo = activo;
        this.fechaAlta = fechaAlta;
    }


	public Cliente() {
		super();
	}

	@Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id_cliente")
	public int getIdCliente() {
		return idCliente;
	}

	public void setIdCliente(int idCliente) {
		this.idCliente = idCliente;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public long getTelefono() {
		return telefono;
	}

	public void setTelefono(long telefono) {
		this.telefono = telefono;
	}

	public boolean isActivo() {
		return activo;
	}

	public void setActivo(boolean activo) {
		this.activo = activo;
	}

	   @Temporal(TemporalType.DATE)
	    @Column(name = "fecha_alta")
	public Date getFechaAlta() {
		return fechaAlta;
	}

	public void setFechaAlta(Date fechaAlta) {
		this.fechaAlta = fechaAlta;
	}


	public void setFacturas(List<Factura> facturas) {
		this.facturas = facturas;
	}

	//El oneToMany es OPCIONAL
    @OneToMany(mappedBy="cliente", cascade=CascadeType.ALL, fetch=FetchType.EAGER)
    //No hace falta JoinColumn
	public List<Factura> getFacturas() {
		return facturas;
	}

    @Override
    public String toString() {
        return ToStringBuilder.reflectionToString(this);
    }

}
























